CREATE PROC [dbo].[Cash_SaveMultilplePrescription] @MultipleUserId SMALLINT
AS
BEGIN
    DECLARE @IsCashPayment BIT = 1,
            @ResultNo NUMERIC(18, 0),
            @PrescriptionId NUMERIC(18, 0),
            @KindSave SMALLINT,
            @ResultMessage NVARCHAR(MAX),
            @PrescriptionNumber VARCHAR(8),
            @PrescriptionType SMALLINT,
            @NumberQueue SMALLINT,
            @ControlUser CHAR(3);
    DECLARE @PrescriptionResult TABLE
    (
        PrescriptionId NUMERIC(18, 0),
        PrescriptionType SMALLINT,
        KindSave SMALLINT,
        Result NUMERIC(18, 0),
        ResultMessage NVARCHAR(MAX)
    );

    DECLARE MultilplePrescriptionCursor CURSOR FOR
    SELECT Id_Havaleh,
           Nu_Forosh,
           Kind_Flag,
           kind_Save,
           ISNULL(NumberQueue, 0),
           CheckU
    FROM dbo.TmpDrugH
    WHERE kind_Save IN ( 2, 3 )
          AND MultipleFactorUserId = @MultipleUserId
    ORDER BY Id_Havaleh;
    OPEN MultilplePrescriptionCursor;
    FETCH NEXT FROM MultilplePrescriptionCursor
    INTO @PrescriptionId,
         @PrescriptionNumber,
         @PrescriptionType,
         @KindSave,
         @NumberQueue,
         @ControlUser;
    BEGIN TRY
        BEGIN TRAN;
        WHILE @@FETCH_STATUS = 0
        BEGIN
            UPDATE dbo.TmpDrugH
            SET User_Cash = @MultipleUserId,
                Tarikh = GETDATE()
            WHERE Id_Havaleh = @PrescriptionId;
            EXEC dbo.Sodor_Factor_Drug @Msg_Num = @ResultNo OUTPUT,
                                       @TmpId = @PrescriptionId; -- numeric(18, 0)
            IF @ResultNo = -1
                SET @ResultMessage
                    = N' ǘ  : ' + @PrescriptionNumber + N'    ǘ  ';
            ELSE IF @ResultNo = -2
                SET @ResultMessage
                    = N' ǘ  : ' + @PrescriptionNumber
                      + N'      ǘ         ';
            ELSE IF @ResultNo = -3
                SET @ResultMessage
                    = N' ǘ  : ' + @PrescriptionNumber
                      + N'            ';
            ELSE IF @ResultNo = -6
                SET @ResultMessage
                    = N' ǘ  : ' + @PrescriptionNumber
                      + N'          ';
            ELSE IF @ResultNo = 0
                    OR @ResultNo = -5
                SET @ResultMessage = N' :     ǘ ' + @PrescriptionNumber;
            ELSE
            BEGIN
                SET @ResultMessage = N'    ';
                IF @NumberQueue <> 0
                   AND ISNULL(@ControlUser, '0') <> '0'
                   AND @ControlUser IS NOT NULL
                    UPDATE TblQueue
                    SET QStatus = 4,
                        Position = 5,
                        EndTime = CONVERT(VARCHAR(5), GETDATE(), 108)
                    WHERE Queue = @NumberQueue
                          AND DateDay = CONVERT(VARCHAR(12), GETDATE(), 111);
            END;
            INSERT INTO @PrescriptionResult
            VALUES
            (@PrescriptionId, @PrescriptionType, @KindSave, @ResultNo, @ResultMessage);
            IF @ResultNo <= 0
            BEGIN
                DELETE FROM @PrescriptionResult
                WHERE @ResultNo > 0;
                RAISERROR('Error raised in Save Prscription .', 16, 1);
            END;
            FETCH NEXT FROM MultilplePrescriptionCursor
            INTO @PrescriptionId,
                 @PrescriptionNumber,
                 @PrescriptionType,
                 @KindSave,
                 @NumberQueue,
                 @ControlUser;
        END;
        CLOSE MultilplePrescriptionCursor;
        DEALLOCATE MultilplePrescriptionCursor;
        COMMIT TRAN;

    END TRY
    BEGIN CATCH
        CLOSE MultilplePrescriptionCursor;
        DEALLOCATE MultilplePrescriptionCursor;
        ROLLBACK TRAN;
    END CATCH;

    SELECT pr.PrescriptionId,
           pr.PrescriptionType,
           KindSave,
           Result,
           ResultMessage,
           dh.Sazman_Code InsuranceCode,
           PrescriptionNumber = CASE
                                    WHEN pr.PrescriptionType = 1 THEN
                                        dh.Nu_Forosh
                                    ELSE
                                        dh.Nu_Bargasht_Forosh
                                END
    FROM @PrescriptionResult pr
        LEFT JOIN dbo.DrugH dh
            ON dh.Id_Havaleh = pr.Result
    ORDER BY dh.Id_Havaleh;
END;
